package com.hmall.api.config;

import com.hmall.api.client.fallback.ItemClientFallbackFactory;
import com.hmall.common.utils.UserContext;
import feign.Logger;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Bean;


public class DefaultFeignConfig {

//    NONE：不记录任何日志信息，这是默认值。
//    BASIC：仅记录请求的方法，URL以及响应状态码和执行时间
//    HEADERS：在BASIC的基础上，额外记录了请求和响应的头信息
//    FULL：记录所有请求和响应的明细，包括头信息、请求体、元数据。

    //声明日志级别配置
    @Bean
    public Logger.Level feignLogLevel() {
        return Logger.Level.FULL;
    }

    //声明请求拦截器,其他服务互相调用接口的时候带上用户信息
    //由于服务之间的互相调用只是调用接口方法，不能传用户信息，调用的接口也不能自动带上网关拦截的用户信息，所以只能通过拦截器
    //这样使得在调用的时候自动带上用户信息
    @Bean
    public RequestInterceptor userInfoRequestInterceptor(){
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                Long userId = UserContext.getUser();
                if (userId != null){
                    //user-info建议统一定义
                    requestTemplate.header("user-info",userId.toString() );
                }
            }
        };
    }


    @Bean
    public ItemClientFallbackFactory itemClientFallbackFactory(){
        return new ItemClientFallbackFactory();
    }

}
